'use strict';
// 比对版本号
const semver = require('semver')
// 颜色插件
const colors = require('colors/safe')
const log = require('@imooc-cli-dev-dq/log');
const { isObject } = require('@imooc-cli-dev-dq/utils');
const LOWEST_NODE_VERSION = '12.0.0'
class Command{
    constructor(argv) {
        // console.log('Command', argv)
        // log.verbose('Command', argv)
        if(!argv){
            throw new Error('参数不能为空！')
        }
        if (!Array.isArray(argv)) {
            throw new Error('参数必须为数组！')
        }
        if (argv.length < 1) {
            throw new Error('参数列表不可为空！')
        }
        this._argv = argv
        let runner = new Promise((resolve, reject) =>{
            let chain = Promise.resolve()
            chain = chain.then(() => this.checkNodeVersion())
            chain = chain.then(() => this.initArgs())
            chain = chain.then(() => this.init())
            chain = chain.then(() => this.exec())
            chain.catch(err => {
                log.error(err.message)
            })
        })
    }
    initArgs() {
        this._cmd = this._argv[this._argv.length - 1];
        this._argv = this._argv.slice(0, this._argv.length - 1)
        // console.log(this._cmd)
        // console.log(this._argv)
        
    }
    checkNodeVersion() {
        // 获取node当前版本号
        const currentVersion = process.version
        // 大于最低版本号
        const lowestVersion = LOWEST_NODE_VERSION
        if (!semver.gte(currentVersion, lowestVersion)) {
            throw new Error(colors.red(`imooc-cli-dq 需要安装 v${lowestVersion}版本以上node.js`))
        } else {
            // log.success('node', currentVersion)
        }
    }
    init() {
        throw new Error('init必须实现')
    }
    exec() {
        throw new Error('exec必须实现')
    }
}

module.exports = Command;